PROGRAMACIÓN
DECLARATIVA

“Di qué quieres, pero no cómo lo quieres” (la frase que describe la programación declarativa)

“El mundo real no es declarativo. Tiene estado (las entidades tienen una memoria interna) y concurrencia (las entidades evolucionan independientemente” (Peter Van Roy & Seif Haridi)



Programación declarativa vs. Programación imperativa

La programación declarativa (también llamada “programación descriptiva”) se suele contraponer a la programación imperativa:
Tipos de lenguajes declarativos

De la misma manera que hay muchos lenguajes imperativos, también hay muchos lenguajes de tipo declarativo. De todas formas, la frontera entre los lenguajes imperativos y declarativos es difusa. Un lenguaje imperativo puede incluir recursos declarativos como funciones y reglas. Y un lenguaje declarativo puede incluir recursos imperativos. Es difícil encontrar lenguajes declarativos “puros”.

Los lenguajes declarativos están asociados a uno o varios paradigmas de programación. Por ejemplo:
Características de la programación declarativa
Ventajas de la programación declarativa

La programación declarativa presenta varias ventajas frente a la programación imperativa:
MENTAL y la Programación Declarativa

MENTAL es un lenguaje multiparadigma. Los diversos paradigmas se pueden expresar mediante los mismos recursos lingüísticos. Algunos paradigmas (como el paradigma lógico) son esencialmente declarativos, pero en todos los paradigmas se pueden utilizar expresiones declarativas, que pueden ser de tipo imperativo, lógico, funcional, algebraico, etc.

La programación declarativa no es realmente un paradigma de programación, sino un meta-paradigma o un estilo de programación que puede utilizarse en todos los paradigmas de programación.

Se suele afirmar que existe una frontera difusa entre la programación imperativa y la declarativa. Con MENTAL, este tema se aclara: no hay tal frontera (horizontal), sino una relación diádica (vertical) entre la programación declarativa y todos los paradigmas de programación, incluyendo el paradigma imperativo.

En MENTAL las expresiones declarativas son de varios tipos:
  1. Expresiones genéricas. Producen inferencias o cálculos automáticos. Gracias a las expresiones genéricas se pueden especificar numerosos paradigmas de programación: programación lógica, orientada a eventos, a restricciones, a aspectos, a agentes, etc.

  2. Sustituciones diferidas (representaciones).

  3. Expresiones de sustitución en las que se establecen relaciones de todo tipo: lógico, algebraico, etc.

Ejemplos de expresiones declarativas
  1. ⟨( f(x y) = (x+y x*y) )⟩ // función
    f(3 4) // ev. (7 12)


  2. ⟨( m>5 → m=5 )⟩ // regla
    (m = 12) // ev. (m = 5)


  3. ( v =: a+b+c ) // representación
    (a=1 b=2 c=3)
    v // ev. 6


  4. a∈C // relación de pertenencia a un conjunto C no definido previamente
    (x = 0)
    (a∈C → (x = 123)
    x // ev. 123


  5. A⊂B // relación de inclusión de un conjunto en otro, ambos no definidos previamente
    (x = 0)
    (A⊂B → (x = 123))
    x // ev. 123


  6. (a*b = c) // relación algebraica entre variables no definidas previamente
    (x = 0)
    ((a*b = c) → (x = 123))
    x // ev. 123


  7. (ε^2 = 0) // definición de infinitésimo (expresión imaginaria)
    (a+ε)^2 // ev. (a^2 + 2aε)


  8. (i^2 = -1) // definición de la unidad imaginaria (expresión imaginaria)
    (a+i)^2 // ev. (a^2 + 2ai - 1)
    i^3 // ev. −i


Bibliografía